package cn.itcast.travel.service.impl;

import cn.itcast.travel.dao.CategoryDao;
import cn.itcast.travel.dao.impl.CategoryDaoImpl;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.service.CategoryService;
import cn.itcast.travel.util.JedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * 类别的展示
 * @Author CHAI
 * @Date 2022/4/28 10:12
 **/
public class CategoryServiceImpl implements CategoryService {
    private CategoryDao dao=new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        //创建redis连接
        Jedis jedis = JedisUtil.getJedis();
        //进行category的查询，判断是否有数据
        //Set<String> category = jedis.zrange("category", 0, -1);
        //带有排序编号的数据(Tuple的两个属性：byte[] element ，Double score)
        Set<Tuple> category = jedis.zrangeWithScores("category", 0, -1);
        List<Category> all=null;
        if (category==null||category.size()==0){
            System.out.println("不使用缓存中的数据");
            //redis中没有数据
            all= dao.findAll();
            System.out.println(all);
            //按照cid的顺序进行把cname存储到redis中
            for (Category s : all) {
                jedis.zadd("category",s.getCid(),s.getCname());
            }
            
        }else{
            System.out.println("使用缓存中的数据");
            //redis中有数据
            //将set集合中数据取出，按照顺序放入List集合中
            all=new ArrayList<Category>();

            for (Tuple tuple : category) {
                Category category1 = new Category();
                //将数据放入Category对象中  tuple.getElement 内部转换为String进行输出
                category1.setCid((int) tuple.getScore());
                category1.setCname(tuple.getElement());
                //将数据添加到集合中
                all.add(category1);
            }

        }
        //System.out.println(all);
        return all;
    }
}
